#define DEBUG
#include <cstdio>
#include <cstring>
#define MAXN 100000

using namespace std;

int max(int a, int b) {
  return a>b ? a : b;
}

int myAnd(int a, int b) {
  return a&b;
}

int myOr(int a, int b) {
  return a|b;
}

void do1(int n, int *a, int opt(int a, int b)) {
  for (int i=2; i<=n; i++) {
    int ans=0, tot=0;
    for (int j=i-1; j>0; j--) {
      if (ans<opt(a[i], a[j])) {
	ans=opt(a[i], a[j]);
	tot=0;
      }
      if (ans==opt(a[i], a[j])) {
	tot++;
      }
    }
    printf("%d %d\n", ans, tot);
  }
}

void do2(int n, int *a) {
  int maxa=a[1];
  for (int i=2; i<=n; i++) {
    printf("%d\n", maxa|a[i]);
    maxa = max(maxa, a[i]);
  }
}

int main() {
  freopen("binary.in", "r", stdin);
  freopen("binary.out", "w", stdout);

  static int a[MAXN+1];
  char opt[4];
  int n, type;
  scanf("%d %s %d", &n, opt, &type);
  for (int i=1; i<=n; i++) {
    scanf("%d", a+i);
  }

  if (strcmp(opt, "or")==0 && !type) {
    do2(n, a);
  } else if (strcmp(opt, "and")==0) {
    do1(n, a, myAnd);
  } else {
    do1(n, a, myOr);
  }

  fclose(stdin);
  fclose(stdout);
  return 0;
}
